# fakeroot

Простая реализация fakeroot с использованием пользовательских пространств имен Linux.

## Что такое fakeroot?

Fakeroot - это утилита, которая запускает команды в среде, где они, имеют права суперпользователя, хотя на самом деле это не так. [Исходная команда `fakeroot`](https://salsa.debian.org/clint/fakeroot /) делает это, перехватывая вызовы функций libc, таких как `stat()`, `chmod()`, `chown()` и т.д., и заменяя их на те, которые возвращают значения, позволяющие предположить, что пользователь является root.

## Чем отличается эта библиотека?

Вместо того, чтобы внедрять пользовательские функции libc, эта библиотека использует встроенные функции изоляции ядра Linux, чтобы создать своего рода контейнер, в котором пользователь является root. Это означает, что даже программы, которые не используют libc (например, программы Go), или программы со статически связанным libc будут считать, что они запущены от имени пользователя root.

Вы также можете вложить этот тип fakeroot до 32 раз, в отличие от оригинального fakeroot на основе libc, который вообще не поддерживает вложенность.

Однако этот подход будет работать только на достаточно новых ядрах Linux (версии 3.8+) и в дистрибутивах, которые не отключают эту функциональность. Однако большинство современных систем Linux поддерживают его, поэтому он должен работать в большинстве случаев.

## Зачем?

Многие утилиты зависят от прав доступа к файлам и владения пользователем. Например, команда tar создает файлы в архиве tar с теми же правами доступа, что и у исходных файлов. Это означает, что если файлы принадлежали определенному пользователю, они сохранят это право собственности при извлечении архива tar. Это может стать проблемой при создании пакетов, поскольку может привести к тому, что системные файлы в пакете будут принадлежать пользователям, не имеющим прав root. Создавая впечатление, что текущий пользователь является root и, следовательно, все файлы принадлежат root, fakeroot использует такие утилиты, как `tar`, чтобы сделать свои файлы принадлежащими root.

Кроме того, многие утилиты могут требовать привилегий root для определенных операций, но могут выдавать ошибки, даже если для конкретной задачи не обязательно нужны эти повышенные разрешения. Fakeroot можно использовать для запуска этих программ без фактического предоставления им привилегий root, что обеспечивает дополнительную безопасность.

### nsfakeroot

Этот репозиторий содержит консольную утилиту под названием "nsfakeroot". Чтобы установить ее, выполните следующую команду:

```bash
go install github.com/xpamych/fakeroot/tree/master/cmd/nsfakeroot@latest
```

Запуск `nsfakeroot` сам по себе запустит вашу командную строку в среде fakeroot. Если вы укажете аргументы, они будут использованы в качестве команды.

Примеры:

```bash
nsfakeroot        # -> (login shell)
nsfakeroot whoami # -> root
nsfakeroot id -u  # -> 0
nsfakeroot id -g  # -> 0
```